package com.gitee.wsl.text.dfa


/**
 * 片段表示，用于表示文本、集合等数据结构的一个区间。
 * @param <T> 数字类型，用于表示位置index
 *
 * @author looly
 * @since 5.5.3
</T> */
interface Segment<T : Number> {
    /**
     * 获取起始位置
     *
     * @return 起始位置
     */
    val startIndex: T

    /**
     * 获取结束位置
     *
     * @return 结束位置
     */
    val endIndex: T

    /**
     * 片段长度，默认计算方法为abs([.getEndIndex] - [.getEndIndex])
     *
     * @return 片段长度
     */
    fun length() = endIndex.toInt() - startIndex.toInt()
}


/**
 * 片段默认实现
 *
 * @param <T> 数字类型，用于表示位置index
 * @author looly
 * @since 5.5.3
</T> */
open class DefaultSegment<T : Number>(override var startIndex: T, override var endIndex: T) : Segment<T>